package bancosys.tec.persist.persister.listener.caselistener;

import org.hibernate.event.PreInsertEvent;
import org.hibernate.event.PreInsertEventListener;
import org.hibernate.event.PreUpdateEvent;
import org.hibernate.event.PreUpdateEventListener;

/**
 * Listener que mudas as Strings inseridas ou alteradas para Caixa Alta.
 * 
 * @author pedro
 */
public final class UpperCaseListener implements PreInsertEventListener, PreUpdateEventListener {

    /**
     * Muda todos os campos String para caixa alta.
     * 
     * @param event evento do PreInsert
     * @return se pode inserir ou não
     */
    public boolean onPreInsert(PreInsertEvent event) {
        Object[] states = event.getState();
        return this.modifyObjectState(states);
    }

    /**
     * Muda todos os campos String para caixa alta.
     * 
     * @param event evento do PostUpdate
     * @return se pode atualizar ou não
     */
    public boolean onPreUpdate(PreUpdateEvent event) {
        Object[] states = event.getState();
        return this.modifyObjectState(states);
    }

    /**
     * @param states estados do objeto
     * @return false (inserção ou remoção não deve ser vetada)
     */
    private boolean modifyObjectState(Object[] states) {
        for (int i = 0; i < states.length; i++) {
            if (states[i] instanceof String && states[i] != null) {
                states[i] = ((String) states[i]).toUpperCase();
            }
        }
        return false;
    }

}
